/**
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.authority.authentication;

import java.io.IOException;
import java.io.Writer;
import java.time.LocalDateTime;
import java.util.UUID;

import com.waln.authority.authentication.data.User;

import pittypat.IUser;

/**
 * 用戶信息。
 */
final class AuthorityUser implements IUser {
	private User user;

	/**
	 * 使用从数据服务中查询到的用户信息初始化 AuthorityUser 的新实例。
	 * 
	 * @param user
	 *            从数据服务中查询到的用户信息。
	 */
	public AuthorityUser(User user) {
		this.user = user;
	}

	/**
	 * 获取用户的 Id，匿名用户的 Id 为 null。
	 */
	@Override
	public UUID getId() {
		return this.user.id;
	}

	/**
	 * 获取用户的登录名称。
	 */
	@Override
	public String getLoginName() {
		return this.user.loginName;
	}

	/**
	 * 获取用户的友好显示名称。
	 */
	@Override
	public String getFriendlyName() {
		return this.user.name;
	}

	/**
	 * 获取用户头像的路径。
	 */
	@Override
	public String getFaceUrl() {
		return this.user.faceUrl;
	}

	/**
	 * 获取用户登录成功后应该进入的第一个页面。
	 */
	@Override
	public String getLoginHomeUrl() {
		return this.user.loginHomeUrl;
	}

	/**
	 * 获取用于设置用户资料的路径。
	 */
	@Override
	public String getSettingUrl() {
		return "~/com/waln/authority/profile/index.html";
	}

	/**
	 * 获取系统的当前日期时间。
	 */
	@Override
	public LocalDateTime getNow() {
		return this.user.now;
	}

	/**
	 * 将当前对象作为 JSON 字符串写入指定的文本流。
	 * 
	 * @param writer
	 *            目标文本流。
	 * @throws IOException
	 */
	@Override
	public void write(Writer writer) throws IOException {
		if (writer == null) {
			throw new IllegalArgumentException("writer 为 null。");
		}

		writer.write('{');

		// Id
		writer.write("\"id\":");
		pittypat.Json.write(writer, this.user.id);
		writer.write(',');

		// 登录名称
		writer.write("\"loginName\":");
		pittypat.Json.write(writer, this.user.loginName);
		writer.write(',');

		// 编号
		writer.write("\"no\":");
		pittypat.Json.write(writer, this.user.no);
		writer.write(',');

		// 用户名称
		writer.write("\"name\":");
		pittypat.Json.write(writer, this.user.name);
		writer.write(',');

		// 头像路径
		writer.write("\"faceUrl\":");
		pittypat.Json.write(writer, this.user.faceUrl);
		writer.write(',');

		// 手机号码
		writer.write("\"mobile\":");
		pittypat.Json.write(writer, this.user.mobile);
		writer.write(',');

		// 电子邮件地址
		writer.write("\"email\":");
		pittypat.Json.write(writer, this.user.email);
		writer.write(',');

		// 创建时间
		writer.write("\"createTime\":");
		pittypat.Json.write(writer, this.user.createTime);
		writer.write(',');

		// 锁定时间
		writer.write("\"lockTime\":");
		pittypat.Json.write(writer, this.user.lockTime);
		writer.write(',');

		// 登录时间
		writer.write("\"loginTime\":");
		pittypat.Json.write(writer, this.user.loginTime);
		writer.write(',');

		// 登录后首页
		writer.write("\"loginHomeUrl\":");
		pittypat.Json.write(writer, this.user.loginHomeUrl);
		writer.write(',');

		// 登录后首页说明
		writer.write("\"loginHomeDescription\":");
		pittypat.Json.write(writer, this.user.loginHomeDescription);
		writer.write(',');

		// 设置用户资料的路径
		writer.write("\"settingUrl\":");
		pittypat.Json.write(writer, this.getSettingUrl());
		writer.write(',');

		// 服务器当前时间
		writer.write("\"now\":");
		pittypat.Json.write(writer, this.user.now);

		writer.write('}');
	}
}
